package wesi;

import java.awt.Color;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.BevelBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;

import wesi.Table.ColumnGroup;
import wesi.Table.GroupableTableHeader;

public class TabSimulation extends Main implements Runnable{

	private static final long serialVersionUID = 1L;
	
	static HauptschalterListener hListener;
	static AnimationAbbrechenSchalterListener aListener;
	static ParameterAktivierenSchalterListener pListener;
	
	
	public void run() {
		deaktiviereHauptschalter();
		aktiviereSchnelldurchlaufSchalter();
		
		while (Zeit.getTag() < Zeit.getNaechsterPeriodenWechsel() ){
			for (int i = 0; i <= 7; i++) {
				Werkstatt.arbeite();
				Zeit.erhoeheStunde();
				BeschrifteLblDatum();

				Werkstatt.repaint();
				JLUhrzeit.repaint();

				try {
					Thread.sleep(GlobalParameters.getAblaufgeschwindigkeit());
				} catch (Exception e) {
				}
			}
		}
		
		aktiviereHauptschalter();
		deaktiviereSchnelldurchlaufSchalter();
		GlobalParameters.setNaechsterArbeitsSchritt();
		GlobalParameters.setzeGeschwindigkeitAufStandardGeschwindigkeit();
	}
	
	
	void arbeite() {
		runner = new Thread(this);
		runner.start();
		runner = null;
	}	
	
	void erstelleSimulationPanel(){
		
		//Werkstatt zeichnen
        Werkstatt.setLocation(0, 0);
        
        //Panel oben rechts
        richteAuftragsVorschauPanelEin();
        
        richteSimulationPanelEin();
        richteParameterPanelEin();
        richteParameter2PanelEin();
        richteLegendePanelEin();
 
		tabbedPaneSimu.setFont(font);
		tabbedPaneSimu.addChangeListener(new ChangeListenerTabbedPaneSimu());
		
		tabbedPaneSimu.setLocation(0, 510);
		tabbedPaneSimu.setSize(970, 360);
		
		tabbedPaneSimu.addTab("neue Aufträge", JScrollPaneNeueAuftraege);											//0
		tabbedPaneSimu.addTab("Durchlaufterminierung", JScrollPaneDurchlaufTerminierung);							//1
		tabbedPaneSimu.addTab("Maschinenauswertung letzte Periode", JScrollPaneMaschinenAuswertungLetztePeriode);	//2
		tabbedPaneSimu.addTab("Maschinenauswertung Gesamtzeit", JScrollPaneMaschinenAuswertungGesamtzeit);			//3
		tabbedPaneSimu.addTab("Grafik letzte Periode", JScrollPaneMaschinenAuswertungLetztePeriodeGrafik);			//4
		tabbedPaneSimu.addTab("Grafik Gesamtzeit", JScrollPaneMaschinenAuswertungGesamtZeitGrafik);					//5
		//tabbedPaneSimu.addTab("SOP", jPanelPrimärBedarfsÄnderung);	
		
		tabbedPaneSimu.addTab("Parameteränderung", JScrollPaneParameterAenderung); // XXX meine zeile. Ändern?	//6
		
//		tabbedPaneSimu.setEnabledAt(0,false);
//		tabbedPaneSimu.setEnabledAt(1,false);
		
		BeschrifteHauptschalter("<html>Prüfe auf<br>neue Aufträge</html>");
		BeschrifteParameterschalter("<html><p>erweiterte Parameter</p> <p align=center>aktivieren</p></html>");
		
		hListener = new HauptschalterListener();
		aListener = new AnimationAbbrechenSchalterListener();
		pListener = new ParameterAktivierenSchalterListener();
		aktiviereHauptschalter();
		aktiviereParameterschalter();
		deaktiviereSchnelldurchlaufSchalter();
		
		//Hinzufügen zu SimulationsPane
		card_simu.add(Werkstatt);
		card_simu.add(tabbedPaneSimu);
		
		getWerteFurCBBJCBDurchlaufZeitAVG();
		getWerteFurCBBJCBEinlastungsprozentsatz();
		
		Zeit.setTerminschranke();
		Zeit.setNaechsterPeriodenWechsel();
		
		for(Maschine m : Werkstatt.getMaschinenListe()){
			m.getWerteFurCBBJCBDurchlaufZeitMaschine();
			m.getWerteFurCBBJCBEinlastungsprozentsatzMaschine();
		}
		JButtonZurDisposition.setEnabled(true);
		JButtonZurDisposition.addActionListener(new ActionListener() {	             
    		public void actionPerformed(ActionEvent event) {
    			buttonZurSimulation.setEnabled(false);
    			buttonNaechste.setEnabled(true);
    			tabbedPane.setEnabledAt(2, false);
    			tabbedPane.setEnabledAt(3, false);
    			tabbedPane.setEnabledAt(4, false);
    			tabbedPane.setEnabledAt(5, false);
			    if (dispoZaehler == 4){
			    	tabbedPane.setEnabledAt(0, true);
			    	tabbedPane.setSelectedIndex(0);
			    	tabbedPane.setEnabledAt(1, false);
			    } else {
			    	tabbedPane.setEnabledAt(1, true);
					tabbedPane.setSelectedIndex(1);
			    }			    						    			
           }
        });
		
	}	
	void richteSimulationPanelEin() {
			int width= 170, height =20;  	 // Breite und Höhe des Labels
			int w2= 150;  					 // Breite des ComboBoxes
			int x=10, x2=25, abstand =5, y = height+abstand;   // Koordinaten der Komponenten. x2 Button

			KontrollLable.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

			JLabel JLInfobox1 = new JLabel("<html><u>Informationen & Steuerung</u></html>");
			JLInfobox1.setLocation(x, 0);
			JLInfobox1.setSize(width, height);
			KontrollLable.add(JLInfobox1);

			JLUhrzeit.setLocation(x, y);
			JLUhrzeit.setSize(width, height);
	        // JLUhrzeit.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
			BeschrifteLblDatum();
			KontrollLable.add(JLUhrzeit);
			
			y= 2*height+2*abstand; //50
					
			JLNaechsterPeriodenWechsel.setLocation(x, y); 
			JLNaechsterPeriodenWechsel.setSize(width, height =35); 
			// JLNaechsterPeriodenWechsel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
			BeschrifteLblNaechsterPeriodenWechsel();
			KontrollLable.add(JLNaechsterPeriodenWechsel);
			

			JLTerminschranke2.setLocation(x, y=y+height+abstand);  // (10,90)
			JLTerminschranke2.setSize(width, height);  
			// JLTerminschranke2.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
			BeschrifteLBLTerminschranke();
			KontrollLable.add(JLTerminschranke2);
			
			// Button
			JButtonHauptschalter.setLocation(x2, y=y+height+abstand);  // (25,130)
			JButtonHauptschalter.setSize(w2, height = 50);		
			JButtonHauptschalter.setMargin(new Insets(1, 1, 1, 1));
			KontrollLable.add(JButtonHauptschalter);

			JButtonAnimationAbbrechen.setLocation(x2, y=y+height+abstand);  // (25,180)
			JButtonAnimationAbbrechen.setSize(w2, height = 30);		 
			JButtonAnimationAbbrechen.setMargin(new Insets(1, 1, 1, 1));
			KontrollLable.add(JButtonAnimationAbbrechen);
			
			JButtonZurDisposition.setLocation(x2, y=y+height+abstand);
			JButtonZurDisposition.setSize(w2, height = 30);
			JButtonZurDisposition.setMargin(new Insets(1, 1, 1, 1));
			KontrollLable.add(JButtonZurDisposition);

			KontrollLable.setLocation(980, lableHeight); // (980,280)  lableHeight=10
			KontrollLable.setSize(190, y=y+height+15); 	 // (190,225) 		
			card_simu.add(KontrollLable);
			
			lableHeight= lableHeight+y+5; // 280+230
	 }
	void richteAuftragsVorschauPanelEin() {
			int height =20;  			
			int abstand =5, y = height+abstand;  

			JScrollPane JScrollPaneAuftragsVorschau = new  JScrollPane(lblAuftragsVorschau, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);		
			JScrollPaneAuftragsVorschau.setLocation(980, lableHeight = 5); 
			JScrollPaneAuftragsVorschau.setSize(190, y=85); 
			
			// 
			JButtonAuftragsDetails.setBounds(1005, y=y+lableHeight+abstand, 130,height= 30);  // y=120
			JButtonAuftragsDetails.setVisible(false);
			card_simu.add(JButtonAuftragsDetails);
			
			card_simu.add(JScrollPaneAuftragsVorschau);

			lableHeight= lableHeight+y+height+2; //=5+120+30+2=157
	 }
	void richteParameterPanelEin() {
			int width= 100, height =20;  	 // Breite und Höhe des Lebels bzw. des ComboBoxes
			int w2= 50;  					 // Breite des ComboBoxes
			int x=10, x2=115, abstand =5, y = height+abstand;  // Koordinaten der Komponenten
			
			ParameterLable.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

			JLabel JLInfobox2 = new JLabel("<html> <u>Umgebungsparameter</u></html>");
			JLInfobox2.setLocation(x, 0);
			JLInfobox2.setSize(width+70, height);
			ParameterLable.add(JLInfobox2);

			JLabel JLPeriodenLaenge = new JLabel("Periodenlänge:");
			JLPeriodenLaenge.setLocation(x, y);
			JLPeriodenLaenge.setSize(width, height);
			ParameterLable.add(JLPeriodenLaenge);
			
			// ComboBox
			JCBPeriodenLaenge.setLocation(x2, y);
			JCBPeriodenLaenge.setSize(w2, height);
			ParameterLable.add(JCBPeriodenLaenge);

			JLabel JLTerminschranke = new JLabel("Terminschranke:");
			JLTerminschranke.setLocation(x, y*2);
			JLTerminschranke.setSize(width, height);
			ParameterLable.add(JLTerminschranke);
			
			// ComboBox
			JCBTerminschranke.setLocation(x2, y*2);
			JCBTerminschranke.setSize(w2,height);
			ParameterLable.add(JCBTerminschranke);

			JLabel JLDurchlaufZeitAVG = new JLabel("Duchlaufzeit:");
			JLDurchlaufZeitAVG.setLocation(x, y*3);
			JLDurchlaufZeitAVG.setSize(width, height);
			ParameterLable.add(JLDurchlaufZeitAVG);
			
			// ComboBox
			JCBDurchlaufZeitAVG.setLocation(x2, y*3);
			JCBDurchlaufZeitAVG.setSize(w2+20, height);
			ParameterLable.add(JCBDurchlaufZeitAVG);
			
//			******************************************* TO DO
			JLabel JLEinlastungsprozentsatz = new JLabel("EPS:"); //Einlastungsprozentsatz
			JLEinlastungsprozentsatz.setLocation(x, y*4);
			JLEinlastungsprozentsatz.setSize(width, height);
			ParameterLable.add(JLEinlastungsprozentsatz);
			// ComboBox
			JCBEinlastungsprozentsatz.setLocation(x2, y*4);
			JCBEinlastungsprozentsatz.setSize(w2+20, height);
			ParameterLable.add(JCBEinlastungsprozentsatz);
			//*******************************************

			JLabel JLReihenfolgeregel = new JLabel("Reihenfolgeregel:");
			JLReihenfolgeregel.setLocation(x, y*5);
			JLReihenfolgeregel.setSize(width, height);
			ParameterLable.add(JLReihenfolgeregel);
			// ComboBox
			JCBReihenfolgeregel.setLocation(x2, y*5);
			JCBReihenfolgeregel.setSize(w2+20, height);
			ParameterLable.add(JCBReihenfolgeregel);

			JLabel JLAnzahlFahrzeuge = new JLabel("Anz. Fahrzeuge:");
			JLAnzahlFahrzeuge.setLocation(x, y*6);
			JLAnzahlFahrzeuge.setSize(width, height);
			ParameterLable.add(JLAnzahlFahrzeuge);
			
			// ComboBox
			JCBAnzahlFahrzeuge.setLocation(x2, y*6);
			JCBAnzahlFahrzeuge.setSize(w2, height);
			ParameterLable.add(JCBAnzahlFahrzeuge);

			// Button erweiterte "Parameter Aktivieren"
			JButtonParameterAktivieren.setLocation(25, y=y*7); //150
			JButtonParameterAktivieren.setSize(150, height=50);
			JButtonParameterAktivieren.setMargin(new Insets(1, 1, 1, 1));

			ParameterLable.add(JButtonParameterAktivieren);

			// Comboboxen auswaehlen (Ausgewählte Werte setzen)
			JCBPeriodenLaenge.setSelectedItem(String.valueOf(GlobalParameters.getPeriodenLaenge()));
			JCBTerminschranke.setSelectedItem(String.valueOf(GlobalParameters.getTerminSchranke()));
			
			JCBDurchlaufZeitAVG.setSelectedItem( GlobalParameters.getDurchlaufZeitAVG() );
			JCBEinlastungsprozentsatz.setSelectedItem((int)(GlobalParameters.getEinlastungsprozentsatz())); //TO DO setzt bei programmStart den wert.
			JCBReihenfolgeregel.setSelectedItem(GlobalParameters.getAktuelleReihenfolgeRegel().toString());
			JCBAnzahlFahrzeuge.setSelectedItem(String.valueOf(GlobalParameters.getAnzahlTransporter()));

			// Event Listener fuer jede Combobox registrieren
			
			JCBAnzahlFahrzeuge.addItemListener(new ComboBoxListener());
			JCBDurchlaufZeitAVG.addItemListener(new ComboBoxListener());
			
			JCBEinlastungsprozentsatz.addItemListener(new ComboBoxListener());
			JCBPeriodenLaenge.addItemListener(new ComboBoxListener());
			JCBReihenfolgeregel.addItemListener(new ComboBoxListener());
			JCBTerminschranke.addItemListener(new ComboBoxListener());

			ParameterLable.setLocation(980, lableHeight);
			ParameterLable.setSize(190, y=y+height+15); // 185
			card_simu.add(ParameterLable);
			
			lableHeight= lableHeight+y+5;
	 }
	void richteParameter2PanelEin() {
			int width= 100, height =20;  	 // Breite und Höhe des Labels bzw. des ComboBoxes
			int w2= 50;  					 // Breite des ComboBoxes
			int x=10, x2=115, y = height+5;  // Koordinaten der Komponenten 

			Parameter2Lable.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

			JLabel JLInfobox3 = new JLabel("<html> <u>Erweiterte Parameter</u></html>");
			JLInfobox3.setLocation(x, 0);
			JLInfobox3.setSize(width+70, height);
			Parameter2Lable.add(JLInfobox3);


			JLabel JLPauschalanteil = new JLabel("Pauschalanteil:");
			JLPauschalanteil.setLocation(x, y);
			JLPauschalanteil.setSize(width, height);
			Parameter2Lable.add(JLPauschalanteil);

			// ComboBox		
			JCBPauschalanteil.setLocation(x2, y);
			JCBPauschalanteil.setSize(w2, height);

			Parameter2Lable.add(JCBPauschalanteil);

			JLabel JLLiegezeitfaktor = new JLabel("Liegezeitfaktor:");
			JLLiegezeitfaktor.setLocation(x, 2*y);
			JLLiegezeitfaktor.setSize(width, height);
			Parameter2Lable.add(JLLiegezeitfaktor);

			// ComboBox		
			JCBLiegezeitfaktor.setLocation(x2, y=2*y);
			JCBLiegezeitfaktor.setSize(w2, height);

			Parameter2Lable.add(JCBLiegezeitfaktor);

			JLabel JLSicherheitszeit = new JLabel("<html><p>globaler</p> <p>Sicherheitsfaktor:</p>");
			JLSicherheitszeit.setLocation(x, y=y+height+10);
			JLSicherheitszeit.setSize(width+5, height+5); // sind 2 zeilen 25 bis 30 PX
			Parameter2Lable.add(JLSicherheitszeit);
			
			// ComboBox
			JCBSicherheitszeitfaktor.setLocation(x2, y=y+10); //y=90
			JCBSicherheitszeitfaktor.setSize(w2, height);
			Parameter2Lable.add(JCBSicherheitszeitfaktor);    

			// Comboboxen Inhalte setzen
			JCBPauschalanteil.setSelectedIndex(10); 		// 2.0
			JCBLiegezeitfaktor.setSelectedIndex(0); 		// 1.0
			JCBSicherheitszeitfaktor.setSelectedIndex(0);	// 1.0

			// Event Listener fuer jede Combobox registrieren
			JCBPauschalanteil.addItemListener(new ComboBoxListener());
			JCBLiegezeitfaktor.addItemListener(new ComboBoxListener());
			JCBSicherheitszeitfaktor.addItemListener(new ComboBoxListener()); 

			ParameterLable.add(JButtonParameterAktivieren);

			Parameter2Lable.setLocation(980, lableHeight);
			Parameter2Lable.setSize(190, y=y+height+15); //120
			Parameter2Lable.setVisible(false);
			card_simu.add(Parameter2Lable);
			
			lableHeight= lableHeight+y+5;
	 }
	void richteLegendePanelEin() {
			int width= 120, height =20;  	 // Breite und Höhe des Labels
			int x=10, abstand =5, y = height+abstand;   // Koordinaten der Komponenten. x2 Button

			LegendeLable.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

			JLabel JLInfobox4 = new JLabel("<html> <u>Legende:</u></html>");
			JLInfobox4.setLocation(x, 0);
			JLInfobox4.setSize(width, height);
			LegendeLable.add(JLInfobox4);

			JLabel JLLDurchfuerhrungszeit = new JLabel("Sicherheitszeit");
			JLLDurchfuerhrungszeit.setLocation(x, y);
			JLLDurchfuerhrungszeit.setSize(width, height);
			JLLDurchfuerhrungszeit.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
			JLLDurchfuerhrungszeit.setBackground(Color.YELLOW);
			JLLDurchfuerhrungszeit.setOpaque(true);
			JLLDurchfuerhrungszeit.setForeground(Color.DARK_GRAY);
			LegendeLable.add(JLLDurchfuerhrungszeit);

			JLabel JLLLiegezeit = new JLabel("Durchführungszeit");
			JLLLiegezeit.setLocation(x, y=y+height+abstand);
			JLLLiegezeit.setSize(width, height);
			JLLLiegezeit.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
			JLLLiegezeit.setBackground(Color.GREEN);
			JLLLiegezeit.setOpaque(true);
			JLLLiegezeit.setForeground(Color.DARK_GRAY);
			LegendeLable.add(JLLLiegezeit);

			JLabel JLLPauschal = new JLabel("Liegezeit");
			JLLPauschal.setLocation(x, y=y+height+abstand);
			JLLPauschal.setSize(width, height);
			JLLPauschal.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
			JLLPauschal.setBackground(Color.RED);
			JLLPauschal.setOpaque(true);
			JLLPauschal.setForeground(Color.DARK_GRAY);
			LegendeLable.add(JLLPauschal);

			JLabel JLSicherheitszeit = new JLabel("Pauschalanteil");
			JLSicherheitszeit.setLocation(x, y=y+height+abstand);
			JLSicherheitszeit.setSize(width, height);
			JLSicherheitszeit.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
			JLSicherheitszeit.setBackground(Color.BLUE);
			JLSicherheitszeit.setOpaque(true);
			JLSicherheitszeit.setForeground(Color.DARK_GRAY);
			LegendeLable.add(JLSicherheitszeit);

			LegendeLable.setLocation(980, lableHeight); 
			LegendeLable.setSize(190, y=y+height+15); //200
			LegendeLable.setVisible(false);
			card_simu.add(LegendeLable);
			
			lableHeight= lableHeight+y+5;
	 }
	
	static void BeschrifteLblDatum() {
			JLUhrzeit.setText("Tag: " + Zeit.getTag() + " Stunde: " + Zeit.getStunde());
	 }
	static void BeschrifteLblNaechsterPeriodenWechsel() {
		 JLNaechsterPeriodenWechsel.setText("<html>Nächster Periodenwechsel:<p>Tag: " + Zeit.getNaechsterPeriodenWechsel() + "<html>");
	 }
	static void BeschrifteLBLTerminschranke() {
		 JLTerminschranke2.setText("<html>Terminschranke:<p>Tag:" + Zeit.getTerminschranke() + "</html>");
	 }
	static void BeschrifteHauptschalter(String text) {
		JButtonHauptschalter.setText(text);
	}
	static void BeschrifteParameterschalter(String text) {
		JButtonParameterAktivieren.setText(text);
	} 
	/**Lable lblAuftragsVorschau befüllen. War ausgeblendet von Wilhelm */
	public static void BeschrifteLBLAuftragsVorschau(Auftrag a) { //Label beschriften
		JButtonAuftragsDetails.setVisible(true);
		JButtonAuftragsDetails.setText("Details zu " + a.getAuftragsnummer());
		JButtonAuftragsDetails.addMouseListener(new JButtonAuftragsDetailsListener(a));
		lblAuftragsVorschau.setText(a.erzeugeHTMLDarstellung());
	}
	
	static void aktiviereHauptschalter() {
		 JButtonHauptschalter.addMouseListener(hListener);
		 JButtonHauptschalter.setEnabled(true);
	 }
	static void deaktiviereHauptschalter() {
		 JButtonHauptschalter.removeMouseListener(hListener);
		 JButtonHauptschalter.setEnabled(false);
	 }	 
	static void aktiviereParameterschalter() {
			JButtonParameterAktivieren.addMouseListener(pListener);
			JButtonParameterAktivieren.setEnabled(true);
	 }		
	static void aktiviereSchnelldurchlaufSchalter() {
		 JButtonAnimationAbbrechen.addMouseListener(aListener);
		 JButtonAnimationAbbrechen.setEnabled(true);
	 }
	static void deaktiviereSchnelldurchlaufSchalter() {
		 JButtonAnimationAbbrechen.removeMouseListener(aListener);
		 JButtonAnimationAbbrechen.setEnabled(false);
	 }
	static void AktiviereDeaktiviereComboBoxenKontrollfeld(boolean aktivieren) {
		JCBEinlastungsprozentsatz.setEnabled(aktivieren); // XXX in dem Fall ist nur bei Periodenbegin aktiv
		tabbedPaneSimu.setEnabledAt(6,aktivieren); // deaktiviere Parameteränderung XXX Frage: sollen die Parameter jederzei Ã¤nderbar sein? 
		
		JCBAnzahlFahrzeuge.setEnabled(aktivieren);
		JCBDurchlaufZeitAVG.setEnabled(aktivieren);
		JCBPeriodenLaenge.setEnabled(aktivieren);
		JCBReihenfolgeregel.setEnabled(aktivieren);
		JCBTerminschranke.setEnabled(aktivieren);
	}
		
	public static void richteJScrollPaneDurchlaufterminierungNachUntenAus(int value) {
		JScrollBar vbar = JScrollPaneDurchlaufTerminierung.getVerticalScrollBar();
		vbar.setValue(value);
	}
	
	/** Berechnet Diapason (Wertebereich) für ZDL. (Auswahlfelder des ComboBoxes)*/
	static void getWerteFurCBBJCBDurchlaufZeitAVG(){
		ZDLDiaposon.clear();
		
		//Wenn erweiterte Parameter nicht aktiviert sind
    	if (JButtonParameterAktivieren.isEnabled()== true){
    		for (double i = 1.0d; i <= 20.0d; i=i+0.5d) {
    			ZDLDiaposon.add(i);
    		}
    		//Aktuelle ZDL Wert Berechnen
    		double i = 0.0d;
    		double j = 0.0d;
    		
    		for(Maschine m : Werkstatt.getMaschinenListe()){
    			i += m.setDurchlaufZeitMaschine() * m.getTageskapazitaet();
    			j += m.getTageskapazitaet();
    		}
    		//ZDL Gewichtet mit TKAP
    		i = i/j;

    		//runden
    		BigDecimal bdi = new BigDecimal( i );
    		bdi = bdi.setScale(2, RoundingMode.FLOOR );
    		i = bdi.doubleValue();
    		
    		// füge i ein, wenn ZDLDiaposon i noch nicht hat
    		if(!ZDLDiaposon.contains(i)){
    			ZDLDiaposon.add(i);
    			//Aufsteigend Sortieren
        		java.util.Collections.sort(ZDLDiaposon);
    		}
    		GlobalParameters.setDurchlaufZeitAVG(i);
    		
    	}else{
    		double i = 0.0d;
    		double j = 0.0d;
    		
    		for(Maschine m : Werkstatt.getMaschinenListe()){
    			i += m.setDurchlaufZeitMaschine() * m.getTageskapazitaet();
    			j += m.getTageskapazitaet();
    		}
    		//ZDL Gewichtet mit TKAP
    		i = i/j;
			
			//runden
			BigDecimal bdi = new BigDecimal( i );
    		bdi = bdi.setScale(2, RoundingMode.FLOOR );
    		i = bdi.doubleValue();
    		
    		GlobalParameters.setDurchlaufZeitAVG(i);
    		// kein Diapason, sondern nur ein Wert
    		//gleitender Durchschnitt
			ZDLDiaposon.add(i);
    	}
	}
	/** Berechnet Diapason (Wertebereich) für EPS. <br>
	 * Vector EPSDiaposon ist für Präsentationsschicht (Auswahlfelder des ComboBoxes).
	 * z.B: EPS= 233. <br>
	 * Vector EPSDiaposonCalc ist für Datenschicht. z.B: EPS= 233.33334*/
	static void getWerteFurCBBJCBEinlastungsprozentsatz(){
		EPSDiaposon.clear();
		EPSDiaposonCalc.clear();

		//Wenn erweiterte Parameter nicht aktiviert sind
		if (JButtonParameterAktivieren.isEnabled()== true){

			int periodenLaenge = GlobalParameters.getPeriodenLaenge();
			//		for (double ZDL=ZDLDiaposon.firstElement() ; ZDL<=ZDLDiaposon.lastElement();  ZDL=ZDL+0.5f) {
			for (double ZDL: ZDLDiaposon){
				int EPS = (int) Math.round((ZDL/periodenLaenge +1)*100);
				double EPSCalc = ((ZDL/periodenLaenge +1)*100);
				EPSDiaposon.add(EPS);
				EPSDiaposonCalc.add(EPSCalc);
			}
			//		System.err.println("EPSDiaposon " +EPSDiaposon);
		}else{
			int EPS = (int)(GlobalParameters.getEinlastungsprozentsatz()) ;
			double EPSCalc = GlobalParameters.getEinlastungsprozentsatz() ;
			// kein Diapason, sondern nur ein Wert
			EPSDiaposon.add(EPS);
			EPSDiaposonCalc.add(EPSCalc);
		}
	}
	
	/**Aktualisiert mehrere Parameter. Wenn man ein Parameter verändert -> update 
	 * Ist aktiv, wenn erweiterte Parameter aktiviert sind*/
	void updateParameter() {
		for(Maschine m : Werkstatt.getMaschinenListe()){
			m.getWerteFurCBBJCBDurchlaufZeitMaschine();
			m.getWerteFurCBBJCBEinlastungsprozentsatzMaschine();
		}
		
		getWerteFurCBBJCBDurchlaufZeitAVG();
		getWerteFurCBBJCBEinlastungsprozentsatz();
		
		if (semaphor_ZDL_EPS) {
			ParameterAenderung.setSemaphor(false);
			semaphor_ZDL_EPS = false;
			JCBDurchlaufZeitAVG.setSelectedItem((Double)(GlobalParameters.getDurchlaufZeitAVG()));
			semaphor_ZDL_EPS = true;
			ParameterAenderung.setSemaphor(true);
		}
		
		if (semaphor_ZDL_EPS) {
			ParameterAenderung.setSemaphor(false);
			semaphor_ZDL_EPS = false;
			JCBEinlastungsprozentsatz.setSelectedItem( (int) GlobalParameters.getEinlastungsprozentsatz());
			semaphor_ZDL_EPS = true;
			ParameterAenderung.setSemaphor(true);
		}
		
		// Änderung hervorruft: ZDL => EPS=> ABFA=> BEL_desArbeitsplatzes
		Utilities.getAktuelleWerkstattBelastung();
		
		Main.Werkstatt.zeichneBelastung();
		Main.Werkstatt.repaint(); //BelastungsSäulen an der Maschine repaint
		
		//"repaint" der RegKarte PaneParameterAenderung
		JScrollPaneParameterAenderung.getViewport().removeAll();
		JScrollPaneParameterAenderung.getViewport().add(new ParameterAenderung());
	}

	/**Aktualisiert mehrere Parameter, wenn man SchichtFaktor verändert-> update 
	 * Ist aktiv, wenn erweiterte Parameter aktiviert sind*/
	static void updateParameterLight(Maschine m) {
		m.getWerteFurCBBJCBDurchlaufZeitMaschine();
		m.getWerteFurCBBJCBEinlastungsprozentsatzMaschine();
		
		getWerteFurCBBJCBDurchlaufZeitAVG();
		getWerteFurCBBJCBEinlastungsprozentsatz();

		if (semaphor_ZDL_EPS) {
			ParameterAenderung.setSemaphor(false);
			semaphor_ZDL_EPS = false;
			JCBDurchlaufZeitAVG.setSelectedItem((Double)(GlobalParameters.getDurchlaufZeitAVG()));
			semaphor_ZDL_EPS = true;
			ParameterAenderung.setSemaphor(true);
		}
		if (semaphor_ZDL_EPS) {
			ParameterAenderung.setSemaphor(false);
			semaphor_ZDL_EPS = false;
			JCBEinlastungsprozentsatz.setSelectedItem( (int) GlobalParameters.getEinlastungsprozentsatz());
			semaphor_ZDL_EPS = true;
			ParameterAenderung.setSemaphor(true);
		}
	}
	
	/**Diese methode macht Hierarchische TabellenKopfzeile*/
	JTable setTabelenHeader(AbstractTableModel dModel, Object[] headersUp) {
		JTable table = new JTable(dModel) {
			private static final long serialVersionUID = 1L;
			
			protected JTableHeader createDefaultTableHeader() {
				getColumnModel().setColumnMargin(0);
				return new GroupableTableHeader(columnModel);
			}
		};

		int metricsCount = 2;
		TableColumnModel tableColumnModel = table.getColumnModel();
		ColumnGroup[] cms = new ColumnGroup[8];
		
		int j = 1;
		for (int i = 0; i < headersUp.length; i++) {
			cms[i] = new ColumnGroup((String) (headersUp[i]));
			for (int k = j; k < j + metricsCount; k++) {
				cms[i].add(tableColumnModel.getColumn(k));
			}
			j = j + metricsCount;
		}

		GroupableTableHeader header = (GroupableTableHeader) table.getTableHeader();
		for (int i = 0; i < headersUp.length; i++) {
			header.addColumnGroup(cms[i]);
		}
		return table;
	}
	
	
	static class JButtonAuftragsDetailsListener extends MouseAdapter {

		Auftrag a;

		public JButtonAuftragsDetailsListener(Auftrag a) {
			this.a = a;
		}

		@Override
		public void mousePressed(MouseEvent e) {
			tabbedPane.removeTabAt(2); // 2. Registerkarte(0,1,2..) aus TabbedPane jtp löschen
			tabbedPane.insertTab("Details zu " + a.getAuftragsnummer(), null, new AuftragsDetails(a), "", 2);
		}
	}
	class ChangeListenerTabbedPaneSimu implements ChangeListener {

			public void stateChanged(ChangeEvent e) {
				Object src = tabbedPaneSimu.getTitleAt(tabbedPaneSimu.getSelectedIndex());
				
				if( src == "Durchlaufterminierung"){
					if (JButtonParameterAktivieren.isEnabled()== false){
						LegendeLable.setVisible(true);
					}

				}else if( src == "Maschinenauswertung letzte Periode"){
					JScrollPaneMaschinenAuswertungLetztePeriode.getViewport().removeAll();
					JScrollPaneMaschinenAuswertungLetztePeriode.getViewport().add(new JTable(new MaschinenAuswertungTabelle(Werkstatt.getMaschinenListe(), false)));
					LegendeLable.setVisible(false);
					
				}else if ( src == "Maschinenauswertung Gesamtzeit"){
					JScrollPaneMaschinenAuswertungGesamtzeit.getViewport().removeAll();
					JScrollPaneMaschinenAuswertungGesamtzeit.getViewport().add(new JTable(new MaschinenAuswertungTabelle(Werkstatt.getMaschinenListe(), true)));
					LegendeLable.setVisible(false);
					
				}else if ( src == "Grafik letzte Periode"){
					JScrollPaneMaschinenAuswertungLetztePeriodeGrafik.getViewport().removeAll();
					JScrollPaneMaschinenAuswertungLetztePeriodeGrafik.getViewport().add(new MaschinenAuswertungGrafik(Werkstatt.getMaschinenListe(), false));
					LegendeLable.setVisible(false);
					
				}else if ( src == "Grafik Gesamtzeit"){
					JScrollPaneMaschinenAuswertungGesamtZeitGrafik.getViewport().removeAll();
					JScrollPaneMaschinenAuswertungGesamtZeitGrafik.getViewport().add(new MaschinenAuswertungGrafik(Werkstatt.getMaschinenListe(), true));
					LegendeLable.setVisible(false);
//				}else if ( src == "SOP"){
//					
//					final JPanel test = new JPanel();
//					test.setBounds(0, 0, 960, 225);
//					test.setBackground(Color.BLACK);
//					jPanelPrimärBedarfsÄnderung.add(test);
//					
//					final JPanel jPanelBarChart = new PrimärBedarfGrafik("test").getBarChart();
//					jPanelBarChart.setBounds(0, 0, 960, 225);
//					jPanelBarChart.setVisible(true);
//					jPanelPrimärBedarfsÄnderung.add(jPanelBarChart);
//					
//					
//				}
				}else if ( src == "DFZ & SZ"){
					JScrollPaneDFZuSZ.getViewport().removeAll();
					JScrollPaneDFZuSZ.getViewport().add(new JTable(new DFZSZTabelle(Werkstatt.getMaschinenListe())));
					
				}else if ( src == "Parameteränderung"){
					JScrollPaneParameterAenderung.getViewport().removeAll();
					JScrollPaneParameterAenderung.getViewport().add(new ParameterAenderung());
				}
			}
		}		
	class HauptschalterListener extends MouseAdapter {

			Vector<Auftrag> neueAuftraege = new Vector<Auftrag>();

			@Override
			public void mousePressed(MouseEvent e) {

				switch (GlobalParameters.getAktuellerArbeitsSchritt()) {
				case Periodenbeginn:            
					if (JButtonParameterAktivieren.isEnabled()== false){
						Parameter.getupdate();
						Parameter.getDFZ();
						Parameter.getStreuung(true);
						Parameter.Datenaktuell=true;
						JCBPauschalanteil.setEnabled(true);
						JCBLiegezeitfaktor.setEnabled(true);
						JCBSicherheitszeitfaktor.setEnabled(true);
						tabbedPaneSimu.addTab("DFZ & SZ", JScrollPaneDFZuSZ);
					}  
					Zeit.setNaechsterPeriodenWechsel();
					Zeit.setTerminschranke();
					TabSimulation.BeschrifteLBLTerminschranke();
					TabSimulation.BeschrifteLblNaechsterPeriodenWechsel();
					Werkstatt.setzeProtokollVariablenAufNull();
					break;

				case PruefeAufNeueAuftraege:
//					tabbedPaneSimu.setEnabledAt(0,true);
					if (JButtonParameterAktivieren.isEnabled()== false){
						tabbedPaneSimu.addTab("DFZ & SZ", JScrollPaneDFZuSZ);
						
						JCBPauschalanteil.setEnabled(true);
						JCBLiegezeitfaktor.setEnabled(true);
						JCBSicherheitszeitfaktor.setEnabled(true);
					} 
					
					AktiviereDeaktiviereComboBoxenKontrollfeld(false);
					
					tabbedPaneSimu.setSelectedIndex(0);
					Auftragsdatei.NeueAuftraegeTabelle neueAuftraegeTab = new Auftragsdatei.NeueAuftraegeTabelle(Zeit.getTag());
					JTable JTableNeueAuftrage = new JTable(neueAuftraegeTab);
					
					JScrollPaneNeueAuftraege.getViewport().removeAll();
					JScrollPaneNeueAuftraege.getViewport().add(JTableNeueAuftrage);
					JScrollPaneNeueAuftraege.repaint();

					if (JButtonParameterAktivieren.isEnabled()== false && Parameter.Datenaktuell==false){
						Parameter.getupdate();
						Parameter.getDFZ();
						Parameter.getStreuung(true);
					}
					else {
						Parameter.Datenaktuell=false;
					}
					
					//Pruefen ob es neue Aufträge gibt. Falls nicht --> weiter mit NeuTerminierungWartetricher
					int neueAuftraegeCount = neueAuftraegeTab.neueAuftraegeCount();
					if (neueAuftraegeCount <= 0) { // wenn keine neue Aufträge
						GlobalParameters.setNaechsterArbeitsSchritt(); //-> neueAuftraegeInWartetrichter übersprungen zu -> NeuTerminierungWartetricher
					}
					
					break;

				case neueAuftraegeInWartetrichter:
					neueAuftraege.clear();
					if (JButtonParameterAktivieren.isEnabled()== false){
						LegendeLable.setVisible(false);
					}  
					//nicht terminierte AuftrÃ¤ge sind ohne Starttermin (Starttermin = 0)!
					neueAuftraege.addAll(Auftragsdatei.NeueAuftraegeTabelle.getNeueAuftraege());
					
					Werkstatt.nimmNeueAuftraegeAn(this.neueAuftraege, Zeit.getZeit());
					Werkstatt.zeichneWartetrichter();
					break;
					
				case NeuTerminierungWartetricher:
					neueAuftraege.clear();
					tabbedPaneSimu.setSelectedIndex(1);
					
					//XXX logik mit Buttons
					if (JButtonParameterAktivieren.isEnabled()== false){
						try{
							tabbedPaneSimu.removeTabAt(tabbedPaneSimu.indexOfTab("DFZ & SZ")); // LÃ¶schen
						}
						catch(Exception exp){
						}
						//Ausblenden
						JCBPauschalanteil.setEnabled(false);
						JCBLiegezeitfaktor.setEnabled(false);
						JCBSicherheitszeitfaktor.setEnabled(false);
						//Einblenden
						LegendeLable.setVisible(true);                        
					}  

					DurchlaufTerminierung dlt2 = new DurchlaufTerminierung(true);
					JScrollPaneDurchlaufTerminierung.getViewport().removeAll();
					JScrollPaneDurchlaufTerminierung.repaint();
					JScrollPaneDurchlaufTerminierung.getViewport().add(dlt2);

					dlt2.zeichneDLT();

					neueAuftraege = dlt2.getNeueAuftraege();
					break;
				
				
				case NeuTerminierteAuftraegeInWartetrichter:
					Werkstatt.wt.nimmNeueAuftraegeAn(this.neueAuftraege);
					Werkstatt.zeichneWartetrichter();
					break;
					
				case AuftragsBelastungNachTerminierung:	
					// Registerkarte mit Auftrags Belastung Nach Terminierung
					tabbedPaneSimu.addTab("Auftrags-Belastung nach Terminierung", JScrollPaneAuftragsBelastungNachTerminierung);
					tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("Auftrags-Belastung nach Terminierung"));
					
					// Tabbele Auftrags Belastung Nach Terminierung
					JScrollPaneAuftragsBelastungNachTerminierung.getViewport().removeAll();
					
					Object[] headersUpNachTerminierung = {"in Periode", "in Vorgriffhorizont", "zukünftig", "insgesamt"};
					JTable jtableABTnachTer = setTabelenHeader(new AuftragsBelastungTabelle(Werkstatt.getMaschinenListe(), true), headersUpNachTerminierung);
					JScrollPaneAuftragsBelastungNachTerminierung.getViewport().add(jtableABTnachTer);
					break;

				case AuftragsSituationNachTerminierung:
					try{
						tabbedPaneSimu.removeTabAt(tabbedPaneSimu.indexOfTab("Auftrags-Belastung nach Terminierung"));
					}
					catch(Exception exp){
					}
					// Registerkarte mit Auftrags-Situation nach Terminierung
					tabbedPaneSimu.addTab("Auftrags-Situation nach Terminierung", JScrollPaneAuftragsSituationNachTerminierung);
					tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("Auftrags-Situation nach Terminierung"));
					
					JScrollPaneAuftragsSituationNachTerminierung.getViewport().removeAll();
					JScrollPaneAuftragsSituationNachTerminierung.getViewport().add(new AuftragsSituation(true));
					break;
				
				case VorhandeneWekstattBelastung:
					try{
						tabbedPaneSimu.removeTabAt(tabbedPaneSimu.indexOfTab("Auftrags-Situation nach Terminierung"));
					}
					catch(Exception exp){
					}
					
					tabbedPaneSimu.addTab("vorhandene WerkstattBelastung", JScrollPaneVorhandeneWerkstattBelastung);
					tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("vorhandene WerkstattBelastung"));
					
					VorhandeneWerkstattBelastung vorhWB = new VorhandeneWerkstattBelastung();
					
					JScrollPaneVorhandeneWerkstattBelastung.getViewport().removeAll();
					JScrollPaneVorhandeneWerkstattBelastung.repaint();
					JScrollPaneVorhandeneWerkstattBelastung.getViewport().add(vorhWB);
					
					vorhWB.zeichneVorhandeneWerkstattBel();
					break;
					
				case AuftragsFreigabe:
					//wenn Registerkarte existiert -> löschen. Der Fall, wenn keine neue Aufträge -> ohne DLT weiter
					try{
						tabbedPaneSimu.removeTabAt(tabbedPaneSimu.indexOfTab("vorhandene WerkstattBelastung"));
					}
					catch(Exception exp){
					}

					tabbedPaneSimu.addTab("AuftragsFreigabe", JScrollPaneAuftragsFreigabe);
					tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("AuftragsFreigabe"));

					AuftragsFreigabe aFreigabe = new AuftragsFreigabe();
					JScrollPaneAuftragsFreigabe.getViewport().removeAll();
					JScrollPaneAuftragsFreigabe.getViewport().add(aFreigabe);

					aFreigabe.zeichneAuftragsFreigabe();
					break;

				case AuftragsBelastungNachFreigabe:
					try{
						tabbedPaneSimu.removeTabAt(tabbedPaneSimu.indexOfTab("AuftragsFreigabe"));
					}
					catch(Exception exp){
					}
					
					tabbedPaneSimu.addTab("Auftrags-Belastung nach Freigabe", JScrollPaneAuftragsBelastungNachFreigabe);
					tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("Auftrags-Belastung nach Freigabe"));
					
					// Tabbele AuftragsBelastungNachFreigabe Anzeigen
					JScrollPaneAuftragsBelastungNachFreigabe.getViewport().removeAll();
					
					Object[] headersUpNachFreigabe = {"freigegeben", "zurückgestellt", "zukünftig", "insgesamt"};
					JTable jtableABTnachFreigabe = setTabelenHeader(new AuftragsBelastungTabelle(Werkstatt.getMaschinenListe(), false), headersUpNachFreigabe);
					JScrollPaneAuftragsBelastungNachFreigabe.getViewport().add(jtableABTnachFreigabe);
					break;
					
				case AuftragsSituationNachFreigabe:
					try{
						tabbedPaneSimu.removeTabAt(tabbedPaneSimu.indexOfTab("Auftrags-Belastung nach Freigabe"));
					}
					catch(Exception exp){
					}
					// Registerkarte mit Auftrags-Situation nach Freigabe
					tabbedPaneSimu.addTab("Auftrags-Situation nach Freigabe", JScrollPaneAuftragsSituationNachFreigabe);
					tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("Auftrags-Situation nach Freigabe"));
					
					JScrollPaneAuftragsSituationNachFreigabe.getViewport().removeAll();
					JScrollPaneAuftragsSituationNachFreigabe.getViewport().add(new AuftragsSituation(false));
					break;

				case Arbeitstag:
					try{
						tabbedPaneSimu.removeTabAt(tabbedPaneSimu.indexOfTab("Auftrags-Situation nach Freigabe"));
					}
					catch(Exception exp){
					}
					
					tabbedPaneSimu.setSelectedIndex(1); //TO DO Fragen, welche Registerkarte hier erscheinen soll
					arbeite();
					break;
				}

				// Es wird fuer jeden Fall der naechste Arbeitsschritt gesetzt, ausser fuer Arbeitstag
				// Arbeitstag macht das selbst
				if (GlobalParameters.getAktuellerArbeitsSchritt() != GlobalParameters.arbeitsschritte.Arbeitstag) {
					GlobalParameters.setNaechsterArbeitsSchritt();
				}
			}
	 }
	class AnimationAbbrechenSchalterListener extends MouseAdapter {

		@Override
		public void mousePressed(MouseEvent e) {
			super.mousePressed(e);
			GlobalParameters.setAblaufgeschwindigkeit(10);
		}
	}	
	class ParameterAktivierenSchalterListener extends MouseAdapter {

		@Override
		public void mousePressed(MouseEvent e) {
			super.mousePressed(e);
			if(JButtonHauptschalter.getText() == "Periodenbeginn" || JButtonHauptschalter.getText()== "<html>Prüfe auf<br>neue Aufträge</html>" ){
				Parameter2Lable.setVisible(true);
				JButtonParameterAktivieren.setText("<html><p>erweiterte Parameter</p> <p align=center>werden verwendet</p></html>");
				
				Parameter.ErmittleDaten();
				Parameter.getupdate();
				Parameter.getDFZ();
				Parameter.getStreuung(true);
				JButtonParameterAktivieren.setEnabled(false);
				
				updateParameter();
			}
		}
	}	
	class ComboBoxListener extends Main implements ItemListener {
		private static final long serialVersionUID = 1L;
		@Override
		public void itemStateChanged(ItemEvent e) {
			Object src = e.getSource();
			
			if (src == JCBAnzahlFahrzeuge) {
				GlobalParameters.setAnzahlTransporter(Integer.valueOf(JCBAnzahlFahrzeuge.getSelectedItem().toString()));
				Werkstatt.setzeTransporterAufExpired();
				Werkstatt.ZeichneTransporter();
				Werkstatt.repaint();
				repaint();
				
			} else if (src == JCBReihenfolgeregel) {
				GlobalParameters.setReihenfolgeRegel(GlobalParameters.Reihenfolgeregel.valueOf(JCBReihenfolgeregel.getSelectedItem().toString()));

			} else if (src == JCBTerminschranke) {
				GlobalParameters.setTerminSchranke(Integer.valueOf(JCBTerminschranke.getSelectedItem().toString()));
				Zeit.changeNaechsterPeriodenWechsel();
				TabSimulation.BeschrifteLblNaechsterPeriodenWechsel();
				Zeit.setTerminschranke();
				TabSimulation.BeschrifteLBLTerminschranke();

			} else if(src == JCBLiegezeitfaktor){
				Parameter.getStreuung(false);
				updateParameter();
				
			} else if(src == JCBPauschalanteil){
				updateParameter();
			
			} else if (src == JCBPeriodenLaenge) {
				GlobalParameters.setPeriodenLaenge(Integer.valueOf(JCBPeriodenLaenge.getSelectedItem().toString()));
				Zeit.changeNaechsterPeriodenWechsel();
				TabSimulation.BeschrifteLblNaechsterPeriodenWechsel();
				Zeit.setTerminschranke();
				TabSimulation.BeschrifteLBLTerminschranke();
				
				//Wenn erweiterte Parameter nicht aktiviert sind
				if (JButtonParameterAktivieren.isEnabled()== true){
					// Wenn PL sich ändert, -> ändert sich EPS-Wert und ->EPS-Diaposon

					getWerteFurCBBJCBEinlastungsprozentsatz();
					
					// neues Wert für EPS im Auswahlfeld(des ComboBoxes Umgebungsparameter) angezeigen	
//					Utilities.setSelectedItemEPSwt();
					if (semaphor_ZDL_EPS) {
						ParameterAenderung.setSemaphor(false);
						semaphor_ZDL_EPS = false;
						JCBEinlastungsprozentsatz.setSelectedItem( (int) GlobalParameters.getEinlastungsprozentsatz());
						semaphor_ZDL_EPS = true;
						ParameterAenderung.setSemaphor(true);
					}
					
					// Hier individuell für jede Maschine. Wenn PL sich ändert, -> ändert sich EPS-Wert und ->EPS-Diaposon
					int i = 0;
					for(Maschine m : Werkstatt.getMaschinenListe()){
						m.getWerteFurCBBJCBEinlastungsprozentsatzMaschine();
						
						if (ParameterAenderung.semaphor_ZDL_EPS[i]) {
							ParameterAenderung.semaphor_ZDL_EPS[i] = false;
							
							ParameterAenderung.JCBEPSMaschine[i].setSelectedItem( (int) m.calcEPSMaschine());
							ParameterAenderung.semaphor_ZDL_EPS[i] = true;
							i++;
						}
					}
//					JScrollPaneParameterAenderung.getViewport().removeAll();
//					JScrollPaneParameterAenderung.repaint();
					JScrollPaneParameterAenderung.getViewport().repaint();
				}else{
					updateParameter();
				}
				// Änderung hervorruft: ZDL => EPS=> ABFA=> BEL_desArbeitsplatzes
				Utilities.getAktuelleWerkstattBelastung();
				Werkstatt.repaint(); //BelastungsSäulen an der Maschine repaint
				
			} else if (src == JCBDurchlaufZeitAVG) {
				tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("Parameteränderung"));
				
				//Wenn erweiterte Parameter aktiviert sind, gibt es nur einen Wert
				//Wenn erweiterte Parameter nicht aktiviert sind
				if (JButtonParameterAktivieren.isEnabled()== true){
					GlobalParameters.setDurchlaufZeitAVG( (Double)(JCBDurchlaufZeitAVG.getSelectedItem()) ); // Object eines Vectors konvertiere in Double, dann setze den Parameter
					
					// neues Wert für EPS im Auswahlfeld des ComboBoxes Umgebungsparameter angezeigen
					if (semaphor_ZDL_EPS) {
						ParameterAenderung.setSemaphor(false);
						semaphor_ZDL_EPS = false;
						JCBEinlastungsprozentsatz.setSelectedItem( (int) GlobalParameters.getEinlastungsprozentsatz());
						semaphor_ZDL_EPS = true;
						ParameterAenderung.setSemaphor(true);
					}
					
					//Setze alle individuelle AP Werte auf allgemeinen Wert
					int i = 0;
					for(Maschine m : Werkstatt.getMaschinenListe()){
						if (ParameterAenderung.semaphor_ZDL_EPS[i]) {
							ParameterAenderung.semaphor_ZDL_EPS[i] = false;
							m.setDurchlaufZeitMaschine((Double)(JCBDurchlaufZeitAVG.getSelectedItem()));
							
							ParameterAenderung.JCBDurchlaufZeitMaschine[i].setSelectedItem( m.getDurchlaufZeitMaschine());
							ParameterAenderung.semaphor_ZDL_EPS[i] = true;
							
							ParameterAenderung.semaphor_ZDL_EPS[i] = false;
							ParameterAenderung.JCBEPSMaschine[i].setSelectedItem( (int) m.calcEPSMaschine());
							ParameterAenderung.semaphor_ZDL_EPS[i] = true;
						}
						i++;
					}

					// Änderung hervorruft: ZDL => EPS=> ABFA=> BEL_desArbeitsplatzes
					Utilities.getAktuelleWerkstattBelastung();
					JScrollPaneParameterAenderung.getViewport().repaint();
					Werkstatt.repaint(); //BelastungsSäulen an der Maschine repaint
				}

			// TO DO wenn man den Wert im ComboBox auswählt/ändert
			} else if (src == JCBEinlastungsprozentsatz) {
				tabbedPaneSimu.setSelectedIndex(tabbedPaneSimu.indexOfTab("Parameteränderung"));
				
				//Wenn erweiterte Parameter aktiviert sind, gibt es nur einen Wert
				//Wenn erweiterte Parameter nicht aktiviert sind
				if (JButtonParameterAktivieren.isEnabled()== true){
					// aus dem Vector EPSDiaposonCalc nimm Element mit dem Index des ausgewählten Elements im Combo Box
					GlobalParameters.setEinlastungsprozentsatz( EPSDiaposonCalc.elementAt(JCBEinlastungsprozentsatz.getSelectedIndex()) );

					// neues Wert für ZDL im Auswahlfeld des ComboBoxes Umgebungsparameter angezeigen
					if (semaphor_ZDL_EPS) {
						ParameterAenderung.setSemaphor(false);
						semaphor_ZDL_EPS = false;
						JCBDurchlaufZeitAVG.setSelectedItem((Double)(GlobalParameters.setDurchlaufZeitAVG()));
						semaphor_ZDL_EPS = true;
						ParameterAenderung.setSemaphor(true);
					}

					//Hier werden individuelle Maschinenwerte auf allgemeine zurückgesetzt
					int i = 0;
					for(Maschine m : Werkstatt.getMaschinenListe()){
						if (ParameterAenderung.semaphor_ZDL_EPS[i]) {
							ParameterAenderung.semaphor_ZDL_EPS[i] = false;
							m.setEPSMaschine( EPSDiaposonCalc.elementAt(JCBEinlastungsprozentsatz.getSelectedIndex()) );
							
							ParameterAenderung.JCBEPSMaschine[i].setSelectedItem( (int)(m.getEPSMaschine()) );
							ParameterAenderung.semaphor_ZDL_EPS[i] = true;
							
							ParameterAenderung.semaphor_ZDL_EPS[i] = false;
							ParameterAenderung.JCBDurchlaufZeitMaschine[i].setSelectedItem( m.setDurchlaufZeitMaschine());
							ParameterAenderung.semaphor_ZDL_EPS[i] = true;
						}
						i++;
					}

					// Änderung hervorruft: ZDL => EPS=> ABFA=> BEL_desArbeitsplatzes
					Utilities.getAktuelleWerkstattBelastung();
					JScrollPaneParameterAenderung.getViewport().repaint();
					Werkstatt.repaint(); //BelastungsSäulen an der Maschine repaint
				}
			}
		}
	}
}

